{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Symbolically Understanding Christoffel Symbol and Riemann Metric Tensor using EinsteinPy" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sympy\n", "from einsteinpy.utils import christoffel\n", "from pprint import pprint" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining the metric tensor for 3d spherical coordinates" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "syms = sympy.symbols('r theta phi')\n", "# define the metric for 3d spherical coordinates\n", "metric = [[0 for i in range(3)] for i in range(3)]\n", "metric[0][0] = 1\n", "metric[1][1] = syms[0]**2\n", "metric[2][2] = (syms[0]**2)*(sympy.sin(syms[1])**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculating the christoffel symbols" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[[0, 0, 0], [0, -r, 0], [0, 0, -r*sin(theta)**2]],\n", " [[0, 1/r, 0], [1/r, 0, 0], [0, 0, -sin(theta)*cos(theta)]],\n", " [[0, 0, 1/r], [0, 0, cos(theta)/sin(theta)], [1/r, cos(theta)/sin(theta), 0]]]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ch = christoffel.christoffels(metric, syms)\n", "ch" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1/r" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ch[1][1][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculating the Riemann Curvature tensor" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[[[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n", " [[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n", " [[0, 0, 0], [0, 0, 0], [0, 0, 0]]],\n", " [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n", " [[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n", " [[0, 0, 0], [0, 0, 0], [0, 0, 0]]],\n", " [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n", " [[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n", " [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rm = christoffel.riemann_curvature_tensor(metric, syms)\n", "rm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculating the christoffel symbols for Kerr Spacetime Metric\n", " - The expressions are unsimplified" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0,\n", " R*a*r*(2*R*a*r**2*sin(theta)**2/(a**2*cos(theta)**2 + r**2)**2 - R*a*sin(theta)**2/(a**2*cos(theta)**2 + r**2))*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)*(-R**2*a**2*r**2*sin(theta)**4/(a**2*cos(theta)**2 + r**2)**2 + (R*r/(a**2*cos(theta)**2 + r**2) - 1)*(-a**2*(-R*r + a**2 + r**2)*sin(theta)**2 + (a**2 + r**2)**2)*sin(theta)**2/(a**2*cos(theta)**2 + r**2))) + (-2*R*r**2/(a**2*cos(theta)**2 + r**2)**2 + R/(a**2*cos(theta)**2 + r**2))*(-a**2*(-R*r + a**2 + r**2)*sin(theta)**2 + (a**2 + r**2)**2)*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)*(-R**2*a**2*r**2*sin(theta)**4/(a**2*cos(theta)**2 + r**2)**2 + (R*r/(a**2*cos(theta)**2 + r**2) - 1)*(-a**2*(-R*r + a**2 + r**2)*sin(theta)**2 + (a**2 + r**2)**2)*sin(theta)**2/(a**2*cos(theta)**2 + r**2))),\n", " R*a**2*r*(-a**2*(-R*r + a**2 + r**2)*sin(theta)**2 + (a**2 + r**2)**2)*sin(theta)**3*cos(theta)/((a**2*cos(theta)**2 + r**2)**3*(-R**2*a**2*r**2*sin(theta)**4/(a**2*cos(theta)**2 + r**2)**2 + (R*r/(a**2*cos(theta)**2 + r**2) - 1)*(-a**2*(-R*r + a**2 + r**2)*sin(theta)**2 + (a**2 + r**2)**2)*sin(theta)**2/(a**2*cos(theta)**2 + r**2))) + R*a*r*(-2*R*a**3*r*sin(theta)**3*cos(theta)/(a**2*cos(theta)**2 + r**2)**2 - 2*R*a*r*sin(theta)*cos(theta)/(a**2*cos(theta)**2 + r**2))*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)*(-R**2*a**2*r**2*sin(theta)**4/(a**2*cos(theta)**2 + r**2)**2 + (R*r/(a**2*cos(theta)**2 + r**2) - 1)*(-a**2*(-R*r + a**2 + r**2)*sin(theta)**2 + (a**2 + r**2)**2)*sin(theta)**2/(a**2*cos(theta)**2 + r**2))),\n", " 0]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kerr_ch = christoffel.kerr_christoffels()\n", "kerr_ch[0][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculating the simplified expressions" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[[0,\n", " R*(-a**4*cos(theta)**2 - a**2*r**2*cos(theta)**2 + a**2*r**2 + r**4)/(2*(a**2*cos(theta)**2 + r**2)**2*(-R*r + a**2 + r**2)),\n", " -2*R*a**2*r*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2)**2,\n", " 0],\n", " [R*(-a**4*cos(theta)**2 - a**2*r**2*cos(theta)**2 + a**2*r**2 + r**4)/(2*(a**2*cos(theta)**2 + r**2)**2*(-R*r + a**2 + r**2)),\n", " 0,\n", " 0,\n", " R*a*(a**6*cos(theta)**4 - a**4*r**2*cos(theta)**4 - 4*a**2*r**4*cos(theta)**2 - a**2*r**4 - 3*r**6)*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)**3*(-R*r + a**2 + r**2))],\n", " [-2*R*a**2*r*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2)**2,\n", " 0,\n", " 0,\n", " R*a**3*r*sin(theta)**3*cos(theta)/(a**2*cos(theta)**2 + r**2)**2],\n", " [0,\n", " R*a*(a**6*cos(theta)**4 - a**4*r**2*cos(theta)**4 - 4*a**2*r**4*cos(theta)**2 - a**2*r**4 - 3*r**6)*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)**3*(-R*r + a**2 + r**2)),\n", " R*a**3*r*sin(theta)**3*cos(theta)/(a**2*cos(theta)**2 + r**2)**2,\n", " 0]],\n", " [[R*(-a**2*cos(theta)**2 + r**2)*(-R*r + a**2 + r**2)/(2*(a**2*cos(theta)**2 + r**2)**3),\n", " 0,\n", " 0,\n", " R*a*(a**2*cos(theta)**2 - r**2)*(-R*r + a**2 + r**2)*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)**3)],\n", " [0,\n", " (r*(-R*r + a**2 + r**2) + (R - 2*r)*(a**2*cos(theta)**2 + r**2)/2)/((a**2*cos(theta)**2 + r**2)*(-R*r + a**2 + r**2)),\n", " -a**2*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2),\n", " 0],\n", " [0,\n", " -a**2*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2),\n", " -r*(-R*r + a**2 + r**2)/(a**2*cos(theta)**2 + r**2),\n", " 0],\n", " [R*a*(a**2*cos(theta)**2 - r**2)*(-R*r + a**2 + r**2)*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)**3),\n", " 0,\n", " 0,\n", " (2*r*(a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2) + (a**2*cos(theta)**2 + r**2)*(a**2*(R - 2*r)*sin(theta)**2 + 4*r*(a**2 + r**2)))*(R*r - a**2 - r**2)*sin(theta)**2/(2*(a**2*cos(theta)**2 + r**2)**3)]],\n", " [[-4*R*a**2*r*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2)**3,\n", " 0,\n", " 0,\n", " 4*R*a*r*(a**2 + r**2)*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2)**3],\n", " [0,\n", " a**2*sin(2*theta)/((-R*r + a**2 + r**2)*(a**2*cos(2*theta) + a**2 + 2*r**2)),\n", " r/(a**2*cos(theta)**2 + r**2),\n", " 0],\n", " [0,\n", " r/(a**2*cos(theta)**2 + r**2),\n", " -a**2*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2),\n", " 0],\n", " [4*R*a*r*(a**2 + r**2)*sin(2*theta)/(a**2*cos(2*theta) + a**2 + 2*r**2)**3,\n", " 0,\n", " 0,\n", " (a**2*(a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2)*sin(theta)**2 + (a**2*cos(theta)**2 + r**2)*(2*a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2))*sin(theta)*cos(theta)/(a**2*cos(theta)**2 + r**2)**3]],\n", " [[0,\n", " R*a*(-a**2*cos(theta)**2 + r**2)/(2*(a**2*cos(theta)**2 + r**2)**2*(-R*r + a**2 + r**2)),\n", " -R*a*r/((a**2*cos(theta)**2 + r**2)**2*tan(theta)),\n", " 0],\n", " [R*a*(-a**2*cos(theta)**2 + r**2)/(2*(a**2*cos(theta)**2 + r**2)**2*(-R*r + a**2 + r**2)),\n", " 0,\n", " 0,\n", " (R**2*a**2*r*(a**2*cos(theta)**2 - r**2)*sin(theta)**2 + (2*r*(a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2) + (a**2*cos(theta)**2 + r**2)*(a**2*(R - 2*r)*sin(theta)**2 + 4*r*(a**2 + r**2)))*(-R*r + a**2*cos(theta)**2 + r**2))/(2*(a**2*cos(theta)**2 + r**2)**3*(-R*r + a**2 + r**2))],\n", " [-R*a*r/((a**2*cos(theta)**2 + r**2)**2*tan(theta)),\n", " 0,\n", " 0,\n", " (R**2*a**2*r**2*(a**2 + r**2)*sin(theta)**2 + (a**2*(a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2)*sin(theta)**2 + (a**2*cos(theta)**2 + r**2)*(2*a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2))*(R*r - a**2*cos(theta)**2 - r**2))/((a**2*cos(theta)**2 + r**2)**3*(-R*r + a**2 + r**2)*tan(theta))],\n", " [0,\n", " (R**2*a**2*r*(a**2*cos(theta)**2 - r**2)*sin(theta)**2 + (2*r*(a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2) + (a**2*cos(theta)**2 + r**2)*(a**2*(R - 2*r)*sin(theta)**2 + 4*r*(a**2 + r**2)))*(-R*r + a**2*cos(theta)**2 + r**2))/(2*(a**2*cos(theta)**2 + r**2)**3*(-R*r + a**2 + r**2)),\n", " (R**2*a**2*r**2*(a**2 + r**2)*sin(theta)**2 + (a**2*(a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2)*sin(theta)**2 + (a**2*cos(theta)**2 + r**2)*(2*a**2*(-R*r + a**2 + r**2)*sin(theta)**2 - (a**2 + r**2)**2))*(R*r - a**2*cos(theta)**2 - r**2))/((a**2*cos(theta)**2 + r**2)**3*(-R*r + a**2 + r**2)*tan(theta)),\n", " 0]]]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kerr_ch_simplified = christoffel.simplify_christoffels(kerr_ch)\n", "kerr_ch_simplified" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }